mir: add timestamps to generated GdkEvents
authorWilliam Hua <william@attente.ca>
Mon, 1 Dec 2014 21:27:29 +0000 (16:27 -0500)
committerWilliam Hua <william@attente.ca>
Thu, 5 Feb 2015 16:26:17 +0000 (17:26 +0100)
We need this because it fixes menu activation. The menu activation code
looks at the time between events to determine if mouse clicks happen too
quickly.

gdk/mir/gdkmireventsource.c

index 20b7972171d9421d82869a158b8e746b462ff18b..68570123b7239c49c68a398bda5e54e6722146a8 100644 (file)
@@ -127,6 +127,7 @@ generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint key
   event->key.keyval = keyval;
   event->key.hardware_keycode = keycode + 8;
   event->key.is_modifier = is_modifier;
+  event->key.time = g_get_monotonic_time () / 1000;
   set_key_event_string (&event->key);
 
   send_event (window, _gdk_mir_device_manager_get_keyboard (gdk_display_get_device_manager (gdk_window_get_display (window))), event);
@@ -148,6 +149,7 @@ generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble
   event->button.y = y;
   event->button.state = state;
   event->button.button = button;
+  event->button.time = g_get_monotonic_time () / 1000;
 
   send_event (window, get_pointer (window), event);
 }
@@ -164,6 +166,7 @@ generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x,
   event->scroll.direction = GDK_SCROLL_SMOOTH;
   event->scroll.delta_x = -delta_x;
   event->scroll.delta_y = -delta_y;
+  event->scroll.time = g_get_monotonic_time () / 1000;
 
   send_event (window, get_pointer (window), event);
 }
@@ -178,6 +181,7 @@ generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state)
   event->motion.y = y;
   event->motion.state = state;
   event->motion.is_hint = FALSE;
+  event->motion.time = g_get_monotonic_time () / 1000;
 
   send_event (window, get_pointer (window), event);
 }
@@ -193,6 +197,7 @@ generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdoubl
   event->crossing.mode = GDK_CROSSING_NORMAL;
   event->crossing.detail = GDK_NOTIFY_ANCESTOR;
   event->crossing.focus = TRUE;
+  event->crossing.time = g_get_monotonic_time () / 1000;
 
   send_event (window, get_pointer (window), event);
 }